/*
 * pinmux.h
 *
 *  Created on: Feb 21, 2020
 *      Author: Administrator
 */

#ifndef SYLIXOS_DRIVER_PINMUX_PINMUX_H_
#define SYLIXOS_DRIVER_PINMUX_PINMUX_H_

#define TEGRA_PINMUX_REG_BASE   (0x70003000)

/*
 * Most pins affected by the pinmux can also be GPIOs. Define these first.
 * These must match how the GPIO driver names/numbers its pins.
 */
#define _GPIO(offset)               (offset)

#define TEGRA_PIN_PEX_L0_RST_N_PA0      _GPIO(0)
#define TEGRA_PIN_PEX_L0_CLKREQ_N_PA1       _GPIO(1)
#define TEGRA_PIN_PEX_WAKE_N_PA2        _GPIO(2)
#define TEGRA_PIN_PEX_L1_RST_N_PA3      _GPIO(3)
#define TEGRA_PIN_PEX_L1_CLKREQ_N_PA4       _GPIO(4)
#define TEGRA_PIN_SATA_LED_ACTIVE_PA5       _GPIO(5)
#define TEGRA_PIN_PA6               _GPIO(6)
#define TEGRA_PIN_DAP1_FS_PB0           _GPIO(8)
#define TEGRA_PIN_DAP1_DIN_PB1          _GPIO(9)
#define TEGRA_PIN_DAP1_DOUT_PB2         _GPIO(10)
#define TEGRA_PIN_DAP1_SCLK_PB3         _GPIO(11)
#define TEGRA_PIN_SPI2_MOSI_PB4         _GPIO(12)
#define TEGRA_PIN_SPI2_MISO_PB5         _GPIO(13)
#define TEGRA_PIN_SPI2_SCK_PB6          _GPIO(14)
#define TEGRA_PIN_SPI2_CS0_PB7          _GPIO(15)
#define TEGRA_PIN_SPI1_MOSI_PC0         _GPIO(16)
#define TEGRA_PIN_SPI1_MISO_PC1         _GPIO(17)
#define TEGRA_PIN_SPI1_SCK_PC2          _GPIO(18)
#define TEGRA_PIN_SPI1_CS0_PC3          _GPIO(19)
#define TEGRA_PIN_SPI1_CS1_PC4          _GPIO(20)
#define TEGRA_PIN_SPI4_SCK_PC5          _GPIO(21)
#define TEGRA_PIN_SPI4_CS0_PC6          _GPIO(22)
#define TEGRA_PIN_SPI4_MOSI_PC7         _GPIO(23)
#define TEGRA_PIN_SPI4_MISO_PD0         _GPIO(24)
#define TEGRA_PIN_UART3_TX_PD1          _GPIO(25)
#define TEGRA_PIN_UART3_RX_PD2          _GPIO(26)
#define TEGRA_PIN_UART3_RTS_PD3         _GPIO(27)
#define TEGRA_PIN_UART3_CTS_PD4         _GPIO(28)
#define TEGRA_PIN_DMIC1_CLK_PE0         _GPIO(32)
#define TEGRA_PIN_DMIC1_DAT_PE1         _GPIO(33)
#define TEGRA_PIN_DMIC2_CLK_PE2         _GPIO(34)
#define TEGRA_PIN_DMIC2_DAT_PE3         _GPIO(35)
#define TEGRA_PIN_DMIC3_CLK_PE4         _GPIO(36)
#define TEGRA_PIN_DMIC3_DAT_PE5         _GPIO(37)
#define TEGRA_PIN_PE6               _GPIO(38)
#define TEGRA_PIN_PE7               _GPIO(39)
#define TEGRA_PIN_GEN3_I2C_SCL_PF0      _GPIO(40)
#define TEGRA_PIN_GEN3_I2C_SDA_PF1      _GPIO(41)
#define TEGRA_PIN_UART2_TX_PG0          _GPIO(48)
#define TEGRA_PIN_UART2_RX_PG1          _GPIO(49)
#define TEGRA_PIN_UART2_RTS_PG2         _GPIO(50)
#define TEGRA_PIN_UART2_CTS_PG3         _GPIO(51)
#define TEGRA_PIN_WIFI_EN_PH0           _GPIO(56)
#define TEGRA_PIN_WIFI_RST_PH1          _GPIO(57)
#define TEGRA_PIN_WIFI_WAKE_AP_PH2      _GPIO(58)
#define TEGRA_PIN_AP_WAKE_BT_PH3        _GPIO(59)
#define TEGRA_PIN_BT_RST_PH4            _GPIO(60)
#define TEGRA_PIN_BT_WAKE_AP_PH5        _GPIO(61)
#define TEGRA_PIN_PH6               _GPIO(62)
#define TEGRA_PIN_AP_WAKE_NFC_PH7       _GPIO(63)
#define TEGRA_PIN_NFC_EN_PI0            _GPIO(64)
#define TEGRA_PIN_NFC_INT_PI1           _GPIO(65)
#define TEGRA_PIN_GPS_EN_PI2            _GPIO(66)
#define TEGRA_PIN_GPS_RST_PI3           _GPIO(67)
#define TEGRA_PIN_UART4_TX_PI4          _GPIO(68)
#define TEGRA_PIN_UART4_RX_PI5          _GPIO(69)
#define TEGRA_PIN_UART4_RTS_PI6         _GPIO(70)
#define TEGRA_PIN_UART4_CTS_PI7         _GPIO(71)
#define TEGRA_PIN_GEN1_I2C_SDA_PJ0      _GPIO(72)
#define TEGRA_PIN_GEN1_I2C_SCL_PJ1      _GPIO(73)
#define TEGRA_PIN_GEN2_I2C_SCL_PJ2      _GPIO(74)
#define TEGRA_PIN_GEN2_I2C_SDA_PJ3      _GPIO(75)
#define TEGRA_PIN_DAP4_FS_PJ4           _GPIO(76)
#define TEGRA_PIN_DAP4_DIN_PJ5          _GPIO(77)
#define TEGRA_PIN_DAP4_DOUT_PJ6         _GPIO(78)
#define TEGRA_PIN_DAP4_SCLK_PJ7         _GPIO(79)
#define TEGRA_PIN_PK0               _GPIO(80)
#define TEGRA_PIN_PK1               _GPIO(81)
#define TEGRA_PIN_PK2               _GPIO(82)
#define TEGRA_PIN_PK3               _GPIO(83)
#define TEGRA_PIN_PK4               _GPIO(84)
#define TEGRA_PIN_PK5               _GPIO(85)
#define TEGRA_PIN_PK6               _GPIO(86)
#define TEGRA_PIN_PK7               _GPIO(87)
#define TEGRA_PIN_PL0               _GPIO(88)
#define TEGRA_PIN_PL1               _GPIO(89)
#define TEGRA_PIN_SDMMC1_CLK_PM0        _GPIO(96)
#define TEGRA_PIN_SDMMC1_CMD_PM1        _GPIO(97)
#define TEGRA_PIN_SDMMC1_DAT3_PM2       _GPIO(98)
#define TEGRA_PIN_SDMMC1_DAT2_PM3       _GPIO(99)
#define TEGRA_PIN_SDMMC1_DAT1_PM4       _GPIO(100)
#define TEGRA_PIN_SDMMC1_DAT0_PM5       _GPIO(101)
#define TEGRA_PIN_SDMMC3_CLK_PP0        _GPIO(120)
#define TEGRA_PIN_SDMMC3_CMD_PP1        _GPIO(121)
#define TEGRA_PIN_SDMMC3_DAT3_PP2       _GPIO(122)
#define TEGRA_PIN_SDMMC3_DAT2_PP3       _GPIO(123)
#define TEGRA_PIN_SDMMC3_DAT1_PP4       _GPIO(124)
#define TEGRA_PIN_SDMMC3_DAT0_PP5       _GPIO(125)
#define TEGRA_PIN_CAM1_MCLK_PS0         _GPIO(144)
#define TEGRA_PIN_CAM2_MCLK_PS1         _GPIO(145)
#define TEGRA_PIN_CAM_I2C_SCL_PS2       _GPIO(146)
#define TEGRA_PIN_CAM_I2C_SDA_PS3       _GPIO(147)
#define TEGRA_PIN_CAM_RST_PS4           _GPIO(148)
#define TEGRA_PIN_CAM_AF_EN_PS5         _GPIO(149)
#define TEGRA_PIN_CAM_FLASH_EN_PS6      _GPIO(150)
#define TEGRA_PIN_CAM1_PWDN_PS7         _GPIO(151)
#define TEGRA_PIN_CAM2_PWDN_PT0         _GPIO(152)
#define TEGRA_PIN_CAM1_STROBE_PT1       _GPIO(153)
#define TEGRA_PIN_UART1_TX_PU0          _GPIO(160)
#define TEGRA_PIN_UART1_RX_PU1          _GPIO(161)
#define TEGRA_PIN_UART1_RTS_PU2         _GPIO(162)
#define TEGRA_PIN_UART1_CTS_PU3         _GPIO(163)
#define TEGRA_PIN_LCD_BL_PWM_PV0        _GPIO(168)
#define TEGRA_PIN_LCD_BL_EN_PV1         _GPIO(169)
#define TEGRA_PIN_LCD_RST_PV2           _GPIO(170)
#define TEGRA_PIN_LCD_GPIO1_PV3         _GPIO(171)
#define TEGRA_PIN_LCD_GPIO2_PV4         _GPIO(172)
#define TEGRA_PIN_AP_READY_PV5          _GPIO(173)
#define TEGRA_PIN_TOUCH_RST_PV6         _GPIO(174)
#define TEGRA_PIN_TOUCH_CLK_PV7         _GPIO(175)
#define TEGRA_PIN_MODEM_WAKE_AP_PX0     _GPIO(184)
#define TEGRA_PIN_TOUCH_INT_PX1         _GPIO(185)
#define TEGRA_PIN_MOTION_INT_PX2        _GPIO(186)
#define TEGRA_PIN_ALS_PROX_INT_PX3      _GPIO(187)
#define TEGRA_PIN_TEMP_ALERT_PX4        _GPIO(188)
#define TEGRA_PIN_BUTTON_POWER_ON_PX5       _GPIO(189)
#define TEGRA_PIN_BUTTON_VOL_UP_PX6     _GPIO(190)
#define TEGRA_PIN_BUTTON_VOL_DOWN_PX7       _GPIO(191)
#define TEGRA_PIN_BUTTON_SLIDE_SW_PY0       _GPIO(192)
#define TEGRA_PIN_BUTTON_HOME_PY1       _GPIO(193)
#define TEGRA_PIN_LCD_TE_PY2            _GPIO(194)
#define TEGRA_PIN_PWR_I2C_SCL_PY3       _GPIO(195)
#define TEGRA_PIN_PWR_I2C_SDA_PY4       _GPIO(196)
#define TEGRA_PIN_CLK_32K_OUT_PY5       _GPIO(197)
#define TEGRA_PIN_PZ0               _GPIO(200)
#define TEGRA_PIN_PZ1               _GPIO(201)
#define TEGRA_PIN_PZ2               _GPIO(202)
#define TEGRA_PIN_PZ3               _GPIO(203)
#define TEGRA_PIN_PZ4               _GPIO(204)
#define TEGRA_PIN_PZ5               _GPIO(205)
#define TEGRA_PIN_DAP2_FS_PAA0          _GPIO(208)
#define TEGRA_PIN_DAP2_SCLK_PAA1        _GPIO(209)
#define TEGRA_PIN_DAP2_DIN_PAA2         _GPIO(210)
#define TEGRA_PIN_DAP2_DOUT_PAA3        _GPIO(211)
#define TEGRA_PIN_AUD_MCLK_PBB0         _GPIO(216)
#define TEGRA_PIN_DVFS_PWM_PBB1         _GPIO(217)
#define TEGRA_PIN_DVFS_CLK_PBB2         _GPIO(218)
#define TEGRA_PIN_GPIO_X1_AUD_PBB3      _GPIO(219)
#define TEGRA_PIN_GPIO_X3_AUD_PBB4      _GPIO(220)
#define TEGRA_PIN_HDMI_CEC_PCC0         _GPIO(224)
#define TEGRA_PIN_HDMI_INT_DP_HPD_PCC1      _GPIO(225)
#define TEGRA_PIN_SPDIF_OUT_PCC2        _GPIO(226)
#define TEGRA_PIN_SPDIF_IN_PCC3         _GPIO(227)
#define TEGRA_PIN_USB_VBUS_EN0_PCC4     _GPIO(228)
#define TEGRA_PIN_USB_VBUS_EN1_PCC5     _GPIO(229)
#define TEGRA_PIN_DP_HPD0_PCC6          _GPIO(230)
#define TEGRA_PIN_PCC7              _GPIO(231)
#define TEGRA_PIN_SPI2_CS1_PDD0         _GPIO(232)
#define TEGRA_PIN_QSPI_SCK_PEE0         _GPIO(240)
#define TEGRA_PIN_QSPI_CS_N_PEE1        _GPIO(241)
#define TEGRA_PIN_QSPI_IO0_PEE2         _GPIO(242)
#define TEGRA_PIN_QSPI_IO1_PEE3         _GPIO(243)
#define TEGRA_PIN_QSPI_IO2_PEE4         _GPIO(244)
#define TEGRA_PIN_QSPI_IO3_PEE5         _GPIO(245)

/* All non-GPIO pins follow */
#define NUM_GPIOS               (TEGRA_PIN_QSPI_IO3_PEE5 + 1)
#define _PIN(offset)                (NUM_GPIOS + (offset))

/* Non-GPIO pins */
#define TEGRA_PIN_CORE_PWR_REQ          _PIN(0)
#define TEGRA_PIN_CPU_PWR_REQ           _PIN(1)
#define TEGRA_PIN_PWR_INT_N         _PIN(2)
#define TEGRA_PIN_CLK_32K_IN            _PIN(3)
#define TEGRA_PIN_JTAG_RTCK         _PIN(4)
#define TEGRA_PIN_BATT_BCL          _PIN(5)
#define TEGRA_PIN_CLK_REQ           _PIN(6)
#define TEGRA_PIN_SHUTDOWN          _PIN(7)

#define PINMUX_PULL_DOWN        (1 << 2)
#define PINMUX_PULL_UP          (2 << 2)

#define PINMUX_TRISTATE_EN      (1 << 4)
#define PINMUX_PARKED_EN        (1 << 5)
#define PINMUX_INPUT_EN         (1 << 6)

#define PINMUX_IO_HV_EN         (1 << 10)

#endif /* SYLIXOS_DRIVER_PINMUX_PINMUX_H_ */
